Amazon Bedrock Intelligent Prompt Routing についてまとめてみた

Amazon Bedrock Intelligent Prompt Routing についてまとめてみた

Clock Icon2024.12.15

こんにちは、森田です。

本記事では、re:Invent 2024 で発表された Amazon Bedrock Intelligent Prompt Routing の詳細をまとめてみました。

https://dev.classmethod.jp/articles/amazon-bedrock-intelligent-prompt-routing-preview/

先にまとめ

  • 適切なモデルに自動的に切り替え(ルーティング)する機能
  • ルーティングはパラメータで一部調整可能
  • 2024/12/15時点では、プレビュー中で制限あり
    • 英語のプロンプトのみサポート
    • デフォルトのルーティング設定のみ利用可能
    • 追加料金は発生しない

Intelligent Prompt Routing

「Intelligent Prompt Routing」は名前の通り、プロンプトの内容に応じて適切なモデルへルーティングしてくれる機能です。

この機能を利用することで、

  • 簡単なタスクは小さなモデル(Haiku)を利用して、素早く回答を生成する
  • 複雑なタスクは大きなモデル(Sonnet)を利用して、品質の高い回答を生成する

といったユースケースに応じた回答生成が実現可能となります。

従来であれば、簡単なタスク+複雑なタスクが入力されるケースでは、回答の品質を維持するため、大きなモデルを利用する必要がありました。

このようなケースで、Prompt Routing を使用することで、簡単なタスクは小さなモデルで実行することができるため、コスト削減も期待できます。

ルーティングの仕組み

気になるのは、どのように判断してモデルを切り替えているのかという点です。

AWSドキュメントを確認したところ、以下のような文言がありました。

  • Intelligent prompt routing can’t adjust routing decisions or responses based on application-specific performance data.
  • Intelligent prompt routing might not always provide the most optimal routing for unique or specialized use cases. How effective the routing is depends on the initial training data.

https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/prompt-routing.html#prompt-routing-limitations

上記からAWS側で「ルーティング判断用のモデル」が用意されているようです。

そのため、ルーティング性能もこの「ルーティング判断用のモデル」の学習状態に依存するため、ユースケースによっては適切にルーティングされない可能性なども考えられそうです。

Routing criteria(ルーティング基準)

Response quality differenceという項目がコンソール上からも確認できました。

スクリーンショット_2024-12-15_21_12_52.png

そのため、一応、ルーティング基準を設定するパラメータはあるようです。

Response quality difference

このパラメータは、大きいモデルと小さいモデル間で応答品質の違いの許容度となります。

この値が小さいほど、応答品質の違いを許容しないことになり、値を大きく設定した場合と比較して、小さいモデルが選ばれにくくなります。

  • 値が小さい
    • 大きいモデルが選ばれやすい
  • 値が大きい
    • 小さいモデルが選ばれやすい

ルーター

ルーティング設定を行うリソースをルーターと呼ぶようです。

なお、プレビュー時では、デフォルト設定のルーター(デフォルトルーター)のみが可能です。

  • Anthropic Prompt Router
  • Meta Prompt Router

スクリーンショット 2024-12-15 23.06.53.png

GAのタイミングで、Router settingsが柔軟に設定できるようになりそうですね。

スクリーンショット_2024-12-15_23_10_23.png

API からの利用

API から利用する際には、ルーターのARNの指定します。

import boto3

region_name = "us-west-2"

sts = boto3.client('sts')
account_id = sts.get_caller_identity()['Account']


client = boto3.client("bedrock-runtime", region_name=region_name)

response = client.converse(
    modelId=f"arn:aws:bedrock:{region_name}:{account_id}:default-prompt-router/anthropic.claude:1",
    messages=[
        {
            "role": "user",
            "content": [{"text": "Alice has N brothers and she also has M sisters. How many sisters does Alice’s brothers have?"}],
        }
    ],
    inferenceConfig={
        "temperature": 0.1,
        "topP": 0.9,
        "maxTokens": 500,
        "stopSequences":[]
    }
)

print(response["output"]["message"]["content"][0]["text"])
print("modelId:", response['trace']['promptRouter']['invokedModelId'].split("inference-profile")[1])



response = client.converse(
    modelId=f"arn:aws:bedrock:{region_name}:{account_id}:default-prompt-router/anthropic.claude:1",
    messages=[
        {
            "role": "user",
            "content": [{"text": "Describe the purpose of a 'hello world' program in one line."}],
        }
    ],
    inferenceConfig={
        "temperature": 0.1,
        "topP": 0.9,
        "maxTokens": 500,
        "stopSequences":[]
    }
)

print(response["output"]["message"]["content"][0]["text"])
print("modelId:", response['trace']['promptRouter']['invokedModelId'].split("inference-profile")[1])
出力結果
To solve this problem, let's think through it step-by-step:

1. Alice has N brothers and M sisters.

2. We need to find out how many sisters Alice's brothers have.

3. Alice's brothers will have the same sisters as Alice does, except for Alice herself.

4. This means that Alice's brothers have all of Alice's sisters, but not Alice.

5. So, the number of sisters that Alice's brothers have is equal to the number of Alice's sisters (M).

Therefore, Alice's brothers have M sisters.

This solution assumes that we're only considering full siblings (same parents). If we were to consider half-siblings or step-siblings, more information would be needed to solve the problem accurately.
> modelId: /us.anthropic.claude-3-5-sonnet-20240620-v1:0
The purpose of a 'hello world' program is to serve as a simple and straightforward introduction to programming, demonstrating the basic structure and functionality of a programming language.
> modelId: /us.anthropic.claude-3-haiku-20240307-v1:0

さいごに

Prompt Routing の詳細について確認してみましたが、まだプレビュー中であるため情報が少なかったです。

今後GAのタイミングでルーティングを開発者側でどこまで制御できるか、そして日本語対応されるかが気になりますね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.